#include<stdio.h>

//110.小乐乐查找数字
// int main()
// {
//     int n = 0;
//     int arr[100] = {0};
//     int x = 0;
//     int count = 0;
//     scanf("%d",&n);
//     int i = 0;
//     for(i=0; i<n; i++)
//     {
//         scanf("%d",&arr[i]);
//     }
//     scanf("%d",&x);
//     for(i=0; i<n; i++)
//     {
//         if(arr[i] == x)
//         {
//             count++;
//         }
//     }
//     printf("%d\n",count);
//     return 0;
// }

//111.KiKi学程序设计基础
// int main()
// {
//     printf("printf(\"Hello world!\\n\");\n");
//     printf("cout << \"Hello world!\" << endl;\n");
//     return 0;
// }

// //112. KiKi求质数个数
// //是素数返回1
// //不是素数返回0
// int is_prime (int n)
// {
//     int j = 0;
//     for(j=2; j<=n-1; j++)
//     {
//         if(n%j == 0)
//         {
//             return 0;
//         }
//     }
//     return 1;
// }
// int main()
// {
//     int i = 0;
//     int count = 0;
//     for(i=100; i<=999; i++)
//     {
//         //判断i按是否为素数
//         if(is_prime(i) == 1)
//         count++;
//     }
//     printf("%d\n",count);
//     return 0;
// }

//113.KiKi去重整数并排序
// int main()
// {
//     //暴力求解法
//     int n = 0;
//     int arr[1000] = {0};
//     scanf("%d",&n);
//     //接收n个数字
//     int i = 0;
//     for(i=0; i<n; i++)
//     {
//         scanf("%d",&arr[i]);
//     }
//     //处理
//     //1.排序—冒泡排序
//     //趟数
//     for(i=0; i<n-1; i++)
//     {
//         int j = 0;
//         for(j=0; j<n-1-i; j++)
//         {
//             if(arr[j] > arr[j+1])
//             {
//                 int tmp = arr[j];
//                 arr[j] =  arr[j+1];
//                 arr[j+1] = tmp;
//             }
//         }
//     }
//     //2.去重
//     //去重比较的对数数n-1;
//     for(i=0; i<n-1; i++)
//     {
//         if(arr[i] == arr[i+1])
//         {
//             //把从i+1下标往后的元素全部往前覆盖
//             int k = 0;
//             for(k=i; k<n-1; k++)
//             {
//                 arr[k] = arr[k+1];
//             }
//             n--;
//             i--;
//         }
//     }
//     //3.打印
//     for(i=0; i<n; i++)
//     {
//         printf("%d ",arr[i]);
//     }
//     return 0;
// }

//*114.KiKi学结构体和指针
//学完数据结构可以回顾一下此题
#include<stdlib.h>
//链表节点的定义
struct Node
{
    int data;//数据域
    struct Node* next;//指针域
};
int main()
{
    struct Node* list = NULL;//指向链表的指针
    struct Node* tail = NULL;//指向链表尾部元素的指针
    //输入n
    int n = 0;
    scanf("%d",&n);
    int i = 0;
    int m = 0;
    int d = 0;//要删除的元素
    //接首n个数字并尾插到链表中
    for(i=0; i<n; i++)
    {
        scanf("%d",&m);
        struct Node* pn = (struct Node*)malloc(sizeof(struct Node));
        pn->data = m;
        pn->next = NULL;
        //插入第一个元素
        if(list == NULL)
        {
            list = pn;
            tail = pn;
        }
        else
        {
            tail->next = pn;
            tail = pn;
        }
    }
        //接收要删除的元素
        scanf("%d",&d);
        //删除链表中的中的指定元素
        struct Node* cur = list;
        struct Node* prev = NULL;
        while(cur)
        {
            //找到了要删除的元素
            if(cur->data == d)
            {
                //删除
                struct Node* pd = cur;
                //删除的如果是第一个节点
                if(cur == list)
                {
                    list = list->next;
                    cur = list;
                }
                //删除的不是第一个节点
                else
                {
                    prev->next = cur->next;
                    cur = prev->next;
                }
                free(pd);
                n--;
            }
            //找不到
            else
            {
                prev = cur;
                cur = cur->next;
            }
        }
    //输出
    printf("%d\n",n);
    cur = list;
    while(cur)
    {
        printf("%d ",cur->data);
        cur = cur->next;
    }
    //释放链表
    cur = list;
    struct Node* del = NULL;
    while(cur)
    {
        del = cur;
        cur = cur->next;
        free(del);
    }
    list = NULL;    
    return 0;
}

//115题为C++代码实现